const http = require("http")
const fs = require("fs")
const qs = require("querystring");

http.createServer((req,res)=>{
    if(req.url.includes("/api")){
        dataRequire(req,res);
    }else{
        fileRequire(req,res);
    }
}).listen(3000,()=>{
    console.log("服务器开启成功，地址为：http://localhost:3000")
})

function dataRequire(req,res){
    let str = "";
    req.on("data",(chunk)=>{
        str += chunk;
    })
    req.on("end",()=>{
        let data;
        if(str){
            data = qs.parse(str);
        }else{
            const urlObj = new URL("http://localhost:3000" + req.url);
            data = qs.parse(urlObj.search.slice(1));
        }
        // 1. 过滤前端请求，判断请求功能
        switch(data.type){
            case "getGoods":
                // 获取数据
                getGoods(req,res);break;
            case "register":
                // 注册
                register(req,res,data);break;
            case "login":
                // 登录
                login(req,res,data);break;
        }
    })
}

// 假设的临时的数据库
// let userMsg = [{username:"admin",password:"123123"},{},{}]
let userMsg = [];

function register(req,res,data){
    // console.log("注册", data);
    // 判断用户名是否重复
    let flag = userMsg.some(val=>val.username === data.username);
    // 准备一个对象，用于存储向前端返回的信息
    let msg = {};
    if(flag){
        // 是，返回注册失败
        msg.code = 0;
        msg.title = "注册失败，用户名重复";
    }else{
        // 否，将用户名和密码存入数据库
        userMsg.push({
            username:data.username,
            password:data.password
        })
        // 返回注册成功
        msg.code = 1;
        msg.title = "注册成功";
    }
    // 将对象转成json，返回给前端
    res.write(JSON.stringify(msg));
    res.end();
}

function login(req,res,data){
    // console.log("登录", data);
    // - 判断用户名是否存在
    let i = 0;
    let flag = userMsg.some((val,idx)=>{
        i = idx;
        return val.username === data.username
    })
    let msg = {};
    if(flag){
        // - 是
        // - 判断密码是否符合
        if(userMsg[i].password === data.password){
            // - 是，返回登录成功
            msg.code = 1;
            msg.title = "登录成功";
            msg.data = userMsg[i];
        }else{
            // - 否，返回密码不对
            msg.code = 0;
            msg.title = "密码不对";
            msg.data = {};
        }
    }else{
        // - 否，返回用户名不存在
        msg.code = 2;
        msg.title = "用户名不存在";
        msg.data = {};
    }
    res.write(JSON.stringify(msg));
    res.end();
}


function getGoods(req,res,data){
    fs.readFile("./data/getPro.json", (err,data)=>{
        res.write(data);
        res.end();
    })
}

function fileRequire(req,res){
    fs.readFile("./www" + req.url.split("?")[0], (err,data)=>{
        if(err){
            res.write("404");
        }else{
            res.write(data);
        }
        res.end();
    })
}
